home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / GRAPHICS.SWG / 0121_VGA 640X480x16.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-24  |  1KB  |  73 lines

  1. {
  2.  NV>     Could somebody tell me how to use mode 640x480x16? I
  3.  NV> don't mean using     it with int 10, 'cause it's too slow,
  4.  NV> but writing directly to VGA     memory. So how do I draw a
  5.  NV> pixel and how do I read a pixel?
  6. well, you set the mode with:
  7.  
  8.       ASM MOV AX, 12h; INT 10h; END;
  9.  
  10. and then draw a pixel with: }
  11.  
  12. PROCEDURE plot_640x480x16(x, y : WORD; c : BYTE); ASSEMBLER;
  13. ASM
  14.   {$IFDEF DPMI}
  15.   MOV ES, SEGA000
  16.   {$ELSE}
  17.   MOV AX, $A000
  18.   MOV ES, AX
  19.   {$ENDIF}
  20.   MOV DI, x
  21.   MOV CX, DI
  22.   SHR DI, 3
  23.   MOV AX, 80
  24.   MUL y
  25.   ADD DI, AX
  26.   AND CL, $07
  27.   MOV AH, $80
  28.   SHR AH, CL
  29.   MOV AL, $08
  30.   MOV DX, $03CE
  31.   OUT DX, AX
  32.   MOV AL, c
  33.   MOV AH, [ES:DI]
  34.   MOV [ES:DI], AL
  35. END;
  36.  
  37.  
  38. { and read a pixel with: }
  39.  
  40.  
  41. FUNCTION point_640x480x16(x, y : WORD) : BYTE; ASSEMBLER;
  42. ASM
  43.   MOV  AX, 80
  44.   MUL  y
  45.   MOV  SI, x
  46.   MOV  CX, SI
  47.   SHR  SI, 3
  48.   ADD  SI, AX
  49.   AND  CL, $07
  50.   XOR  CL, $07
  51.   MOV  CH, 1
  52.   SHL  CH, CL
  53.   {$IFDEF DPMI}
  54.   MOV  ES, SEGA000
  55.   {$ELSE}
  56.   MOV  AX, $A000
  57.   MOV  ES, AX
  58.   {$ENDIF}
  59.   MOV  DX, $03CE
  60.   MOV  AX, 772
  61.   XOR  BL, BL
  62. @gp1:
  63.   OUT  DX, AX
  64.   MOV  BH, ES:[SI]
  65.   AND  BH, CH
  66.   NEG  BH
  67.   ROL  BX, $0001
  68.   DEC  AH
  69.   JGE  @gp1
  70.   MOV  AL, BL
  71. END;
  72.  
  73.